/*
 * To cange this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import model.dto.acao.AcaoLoteMudaDTO;

/**
 *
 * @author Gabriel
 */
public class AcaoLoteMudaDAO extends DAO {
    //TODO: Refazer esse SELECT
    private final String SELECT_ACAO_LOTE_MUDA =  "SELECT a.Id,\n"
                                                + "       a.Id_Lote_Muda,\n"
                                                + "       a.Id_Acao\n"
                                                + "       tal.Nome,\n"
                                                + "       tal.Descricao\n"
                                                + "       tal.Flg_Alvo\n"
                                                + "       a.Data,\n"
                                                + "       a.Produto_Usado,\n"
                                                + "       a.Quantidade_Produto,\n"
                                                + "       a.Quantidade_Mudas,\n"
                                                + "       a.Local_Armazenamento,\n"
                                                + "       a.Media_Altura,\n"
                                                + "       a.Fase_Muda,\n"
                                                + "       a.Id_Registro_Saida,\n"
                                                + "       a.Observacao,\n"
                                                + "       a.Usuario_Responsavel\n"
                                                + "FROM Acao a, Tipo_Acao_Lote tal\n"
                                                + "WHERE a.Id_Acao = tal.Id\n"
                                                + "  and a.Id_Lote_Muda = ";

    public AcaoLoteMudaDAO() throws SQLException, ClassNotFoundException {
        super();
    }

    public void persisteAcaoLoteMuda(AcaoLoteMudaDTO acaoLoteMudaDTO) throws SQLException {

        sql = "INSERT INTO Acao (Id_Lote_Muda,Id_Acao,Data,Produto_Usado,Quantidade_Produto,Quantidade_Mudas,\n"
            + "                  Local_Armazenamento,Media_Altura,Fase_Muda,Id_Registro_Saida,Observacao,\n"
            + "                  Usuario_Responsavel)\n"
            + "VALUES ("+acaoLoteMudaDTO.getIdLoteMuda()+","
                        +acaoLoteMudaDTO.getIdTipoAcao()+","
                        +acaoLoteMudaDTO.getData()+","
                        +acaoLoteMudaDTO.getProdutoUsado()+","
                        +acaoLoteMudaDTO.getQtdMudas()+","
                        +acaoLoteMudaDTO.getLocalArmazenamento()+","
                        +acaoLoteMudaDTO.getMediaAltura()+","
                        +acaoLoteMudaDTO.getIdFaseMuda()+","
                        +acaoLoteMudaDTO.getIdRegistroSaida()+","
                        +acaoLoteMudaDTO.getObservacao()+","
                        +acaoLoteMudaDTO.getUsuarioResponsavel()+");";

        connector.executeInsertQuery(sql);
        
    }

    private AcaoLoteMudaDTO getAcaoLoteMudaResultSet(ResultSet rs) throws SQLException {
        AcaoLoteMudaDTO acaoLoteMudaDTO = new AcaoLoteMudaDTO();
        acaoLoteMudaDTO.setId(rs.getInt("Id"));
        acaoLoteMudaDTO.setIdLoteMuda(rs.getInt("Id_Lote_Muda"));
        acaoLoteMudaDTO.setTipoAcao(rs.getString("Id_Acao"), rs.getString("Nome_Acao"), rs.getString("Descricao_Acao"));
        acaoLoteMudaDTO.setData(rs.getDate("Data"));
        acaoLoteMudaDTO.setProdutoUsado(rs.getString("Produto_Usado"));
        acaoLoteMudaDTO.setQuantidadeProduto(rs.getDouble("Quantidade_Produto"));
        acaoLoteMudaDTO.setQtdMudas(rs.getInt("Qtd_Mudas"));
        acaoLoteMudaDTO.setLocalArmazenamento(rs.getString("Local_Armazenamento"));
        acaoLoteMudaDTO.setMediaAltura(rs.getDouble("Media_Altura"));
        acaoLoteMudaDTO.setFaseMuda(rs.getInt("Id_Fase_Muda"), rs.getString("Descricao_Fase_Muda"));
        acaoLoteMudaDTO.setIdRegistroSaida(rs.getInt("Id_Registro_Saida"));
        acaoLoteMudaDTO.setObservacao(rs.getString("Observacao"));
        acaoLoteMudaDTO.setUsuarioResponsavel(rs.getString("Usuario_Responsavel"));
        return acaoLoteMudaDTO;
    }

    private LinkedList<AcaoLoteMudaDTO> getAcoesLoteMudaResultSet(ResultSet rs) throws SQLException {
        LinkedList<AcaoLoteMudaDTO> acaoLoteMudaDTOs = new LinkedList<AcaoLoteMudaDTO>();
        while (rs.next()) {
            acaoLoteMudaDTOs.add(getAcaoLoteMudaResultSet(rs));
        }
        return acaoLoteMudaDTOs;
    }

    public LinkedList<AcaoLoteMudaDTO> getAcoesLoteMuda(Integer idLoteMuda) throws SQLException {
        sql += SELECT_ACAO_LOTE_MUDA + idLoteMuda + ";";
        connector.executeSelectQuery(sql);
        return getAcoesLoteMudaResultSet(resultSet);
    }
}
